package com.mokairui.basic.demo;

import lombok.extern.slf4j.Slf4j;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * @author Mokairui
 * @Description 目标：客户端发送消息，服务端接受消息
 * @Since 2021/6/27
 */
@Slf4j(topic = "c.Server")
public class Server {
    public static void main(String[] args) {
        try {
            log.debug("==服务端启动==");
            // 1. 定义一个ServerSocket对象进行服务端的端口注册
            ServerSocket serverSocket = new ServerSocket(9999);
            // 2. 监听客户端的Socket连接请求
            Socket socket = serverSocket.accept();
            // 3. 从socket管道中得到一个字节输入流对象
            InputStream is = socket.getInputStream();
            // 4. 把字节输入流包装成一个缓冲字符输入流
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            String msg;
            // 没有使用while是因为在BIO中readLine会一直等待客户端发送消息过来，如果这时客服端发送一条消息后宕机了，这时服务
            // 服务端也会断开进行连接重连Connection reset
            if ((msg = br.readLine()) != null) {
                log.debug("服务端接受到：{}", msg);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}
